﻿/// <reference path="jquery.js" />
/*
配合代码生成工具使用的验证插件alxf.validate = alxv
*/

//(function ($) {
//    $.fn.extend({
//        test: function () {
//            var mytestfun = function () {
//                alert('test');
//            };
//            return this.each(mytestfun);
//        }
//    });
//})(jQuery);

(function ($) {
    $.fn.extend({
        alxv: function (rule) {

            var options = {
                success: 'alxv-success',
                failed: 'alxv-failed',
                msg: 'alxv-msg',
                json: 'alxjs'
            };
            var validate = function () {
                var jd = $('#' + rule.id);
                //移除原来的提示信息
                $('span.hint[vid="' + rule.id + '"]').remove();
                if (rule.isReq || jd.val() != '') {
                    if (rule.rule(jd)) {//验证通过
                        jd.removeClass(options.failed).addClass(options.success);
                    }
                    else {
                        jd.removeClass(options.success).addClass(options.failed);
                        var msg = $('<span/>').addClass(options.msg).text(rule.msg);
                        //jd.after(msg);
                        msg = $('<span vid="' + rule.id + '" class="hint">' + rule.msg + '<span class="hint-pointer"></span></span>').show();

                        
                        //msg.css('left', jd.offset().left + jd.width() + 40);
                        //msg.css('top', jd.offset().top);
                        msg.css('left', jd.position().left + jd.width() + 40); //yhw 2012/12/16 日将这句替换 msg.css('left', jd.offset().left + jd.width() + 40);
                        msg.css('top', jd.position().top); //yhw 2012/12/16 日将这句替换 msg.css('top', jd.offset().top);
                        
                        if (jd.val() != '' || window.gsubmit) {
                            jd.after(msg);
                            //$('body').append(msg);  yhw 2012/12/16 日将这句替换 jd.after(msg);
                            setTimeout(function () {
                                $('span.hint[vid="' + rule.id + '"]').fadeIn(1000, function () {
                                    $('span.hint[vid="' + rule.id + '"]').remove();
                                });
                            }, rule.showTime);
                        }
                    }
                } else {
                    $(this).val(rule.defaultVal);
                }
            };
            return this.blur(validate);
        }
    });
})(jQuery);

(function () {
    //初始化验证规则集合
    if (!window.alxVr) {
        window.alxVr = [];
    }
    //当前是否是点击的提交按钮
    window.gsubmit = false;
})();  //自定义客户端验证的集合



jQuery.extend({
    validateAll: function () {
        window.gsubmit = true;
        $.each(alxVr, function () {//触发一遍多条件验证
            $('#' + this.id).blur();
        });
        window.gsubmit = false;
        if ($('.alxv-failed').size() == 0) {
            return true;
        } else {
            return false;
        }
    },
    validateBind: function () {
        var alxvRule = {
            defaultVal: '',
            rule: function () { return false },
            msg: 'XX',
            id: '#',
            isReq: true,
            showTime: 3000
        };
        //把简单验证绑定
        //$('input[alxjs]').alxv();
        //绑定多条件验证    
        $.each(alxVr, function () {
            var role = $.extend({}, alxvRule, this);
            $('#' + this.id).alxv(role);
        });
    },
    validateRuleArr: function (ruleArr) {
        //window.gsubmit = true;
        $.each(ruleArr, function () {//触发一遍多条件验证
            $('#' + this.id).blur();
        });
        //window.gsubmit = false;
        return ($('.alxv-failed').size() == 0);
    },
    regValidateRule: function (ruleArr) {
        var alxvRule = {
            defaultVal: '', rule: function () { return false },
            msg: 'XX', id: '#', isReq: true, showTime: 3000
        };
        $.each(ruleArr, function () {
            var role = $.extend({}, alxvRule, this);
            $('#' + this.id).alxv(role);
        });
    }
});

$(function () {
    $.validateBind();
});